IMSP_SP_GMRES

The IMSL_SP_GMRES function solves a linear system Ax = b using the restarted generalized minimum residual (GMRES) method.

Note: This routine requires an IDL Analyst license. For more information, contact your Exelis sales or technical support representative.

Example

This example finds the solution to a linear system.

The coefficient matrix is stored in coordinate format. Consider the following matrix: Let xT = (1, 2, 3, 4, 5, 6) so that Ax = (10, 7, 45, 33, –34, 31)T. The number of nonzeros in A is 15.

FUNCTION Amultp, p

; This function uses IMSL_SP_MVMUL to multiply a sparse

; matrix stored in coordinate storage mode and a vector.

; The common block holds the sparse matrix.

COMMON Gmres_ex1, nrows, ncols, a

RETURN, IMSL_SP_MVMUL(nrows, ncols, a, p)

END

 

PRO Gmres1

; This procedure defines the sparse matrix A stored in coordinate

; storage mode, and then calls IMSL_SP_GMRES to compute the

; solution to Ax = b.

COMMON Gmres_ex1, nrows, ncols, a

; Initialize sparse matrix structure variables

@imsl_init

 

A = REPLICATE(imsl_f_sp_elem, 15)

a(*).row = [0, 1, 1, 1, 2, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5]

a(*).col = [0, 1, 2, 3, 2, 0, 3, 4, 0, 3, 4, 5, 0, 1, 5]

a(*).val = [10, 10, -3, -1, 15, -2, 10, -1, -1, -5, $

1, -3, -1, -2, 6]

nrows = 6

ncols = 6

b = [10, 7, 45, 33, -34, 31]

itmax = 10

; Itmax is input/output.

x = IMSL_SP_GMRES('amultp', b, Itmax = itmax)

pm, x, title = 'Solution to Ax = b'

pm, itmax, title = 'Number of iterations'

END

; Output of this procedure:

Solution to Ax = b

1.0000000

2.0000000

3.0000000

4.0000000

5.0000000

6.0000000

Number of iterations

6

Syntax

Result = IMSL_SP_GMRES(amultp, b [, /DOUBLE] [, HH_REORTH=value] [, ITMAX=value] [, MAX_KRYLOV=value] [, PRECOND=value] [, TOLERANCE=value])

Return Value

A one-dimensional array containing the solution of the linear system Ax = b.

Arguments

amultp

Scalar string specifying a user supplied function that computes z = Ap. The function accepts the argument p, and returns the vector Ap.

b

One-dimensional matrix containing the right-hand side.

Keywords

DOUBLE

If present and nonzero, double precision is used.

HH_REORTH

If present and nonzero, perform orthogonalization by Householder transformations, replacing the Gram-Schmidt process.

ITMAX

Initially set to the maximum number of GMRES iterations allowed. On exit, the number of iterations used is returned. Default: ITMAX = 1000

MAX_KRYLOV

The maximum Krylov subspace dimension, that is, the maximum allowable number of GMRES iterations allowed before restarting. Default: MAX_KRYLOV = Minimum(N_ELEMENTS(b), 20).

PRECOND

Scalar sting specifying a user supplied function which sets z = M–1r, where M is the preconditioning matrix.

TOLERANCE

The algorithm attempts to generate x such that: where t = TOLERANCE. Default: TOLERANCE = SQRT(machine precision).

Version History

6.4

Introduced